package mysql8学习.高级.第16章_多版本并发控制;

/**
 * 4.2设计思路  只能用到 读已提交和可重复读的 隔离级别
 * ● 使用READ UNCOMMITTED 隔离级别的事务，由于可以读到未提交事务修改过的记录,
 *       所以直接读取记录的最新版本就好了。
 * ● 使用SERIALIZABLE(串行化)隔离级别的事务，InnoDB规定使用加锁的方式来访问记录。
 *   读的已经是最新了
 * ● 使用READ COMMITTED 和REPEATABLE READ 隔离级别的事务,
 * 都必须保证读到已经提交了的事务修改过的记录。
 * 假如另一个事务已经修改了记录但是尚未提交,是不能直接读取最新版本的记录的,
 * 核心问题就是需要判断一下版本链中的哪个版本是当前事务可见的，
 * 这是ReadView要解决的主要问题。
 *
 * 这个ReadView中主要包含4个比较重要的内容,分别如下:
 *   1. creator_trx_id,创建这个Read View的事务ID。
 *      说明:只有在对表中的记录做改动时(执行INSERT、 DELETE、 UPDATE这些语句时)
 *      才会为事务分配事务id, 否则在一个只读事务中的事务id值都默认为0。
 *   2. trx_ids,表示在生成 ReadView 时当前系统中  活跃的读写事务的事务id列表。
 *   3. up_limit_id,活跃的事务中 最小 的事务ID。
 *   4. low_limit_id,表示生成ReadView时系统中应该分配给下一个事务的id值。
 *      low_limit_id 是"系统最大"的事务id值，这里要注意是系统中的事务id,需要区别于正在活跃的事务ID。
 *
 *        注意: low_limit_jid并不是trx_jds中的最大值，事务id是递增分配的。
 *        比如，现在有id为1,2,3这三个事务，之后id为3的事务提交了。
 *        那么一个新的读事务在生成ReadView时，trx_ids就包括1和2，
 *        up_limit_id 的值就是1, low_limit_id 的值就是4。
 *
 *
 */
public class D2_设计思路 {
}